<?php
namespace app\admin\model\facrm;
use app\admin\library\Auth;
use think\Cache;
use think\Model;

/**
 * 坐席管理
 */
class Cloudcall extends Model
{
	protected $name = 'facrm_cloudcall';
    // 自动写入时间戳字段
    protected $autoWriteTimestamp = 'int';
    // 定义时间戳字段名
    protected $createTime = 'create_time';
    protected $updateTime = 'update_time';


    /**
     * 关联员工
     */
    public function admin()
    {
        return $this->hasOne('app\admin\model\Admin', 'id', 'admin_id');
    }


    /**
     * 云呼签入签出
     * @param $from_exten 坐席工号
     * @param $exten_type 云呼方式 Local/gateway
     * @return bool
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public static  function  sign($from_exten,$exten_type,$sign='SignIn'){
        //获取云呼配置
        $all_types =  \addons\facrm\library\cloudcall\Call::getProviders();
        $keys = "";
        foreach ($all_types as $v) {
            $keys .= $keys ? ',' .'cloudcall'. $v : 'cloudcall' . $v;
        }
        $settingModel = new \app\admin\model\facrm\Setting();
        $setting= $settingModel->where('key', 'in', $keys)->where('status', 1)->find();//只找一条云呼通道
        if (!$setting) return true;


        try {
            $setting=$setting->toArray();
            $setting['key']=$setting['describe'];
            $setting=array_merge($setting,$setting['values']);
            $call= \addons\facrm\library\cloudcall\Call::instance($setting);
            $send_data=[
                'sign'=>$sign,//SignIn / SignOut
                'exten'=>$from_exten,//座席号
                'exten_type'=>$exten_type,//Local/sip/gateway外呼时强制坐席使用该接听方式进行外呼。Local为“手机”,”gateway为“语音网关”
            ];
            $result=$call->signInOrOut($send_data);
            if (!$result){
                return  false;
            }

            return true;

        }catch (\Exception $e){
            return  false;
        }
    }


    /**
     * 修改坐席号
     * @param $cloud
     * @param $admin_id
     * @param $from_exten
     * @param bool $is_add 如果不存在是否添加
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public static function edit($cloud,$admin_id,$from_exten,$is_add=false){

        if (!$cloud){
            //获取云呼配置
            $all_types =  \addons\facrm\library\cloudcall\Call::getProviders();
            $keys = "";
            foreach ($all_types as $v) {
                $keys .= $keys ? ',' .'cloudcall'. $v : 'cloudcall' . $v;
            }
            $settingModel = new \app\admin\model\facrm\Setting();
            $setting= $settingModel->where('key', 'in', $keys)->where('status', 1)->find();//只找一条云呼通道
            if (!$setting) return true;
            $cloud=$setting['describe'];
        }
        if (!$admin_id){
            $auth= Auth::instance();

            if (!$auth->id) return  false;

            $admin_id=$auth->id;

        }

        $model=new self();
        $row = $model->where('cloud', $cloud)->where('admin_id',$admin_id)->find();

        $result=false;
        if (!$row&&$is_add) {
            //添加
            $params=[
                'cloud'=>$cloud,
                'admin_id'=>$admin_id,
                'from_exten'=>$from_exten,
                'create_time'=>time(),
            ];
            $result = $model->allowField(true)->save($params);
        } else if ($row) {
            //修改
            $result = $row->save(['from_exten'=>$from_exten]);
        }
        return $result?true:false;

    }



}